# -*- coding: utf-8 -*-
# @author: robin
import requests
from langchain.agents import create_openai_tools_agent, AgentExecutor, tool
from langchain_core.prompts import ChatPromptTemplate, PromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_openai import ChatOpenAI, OpenAI
import os

api_key = os.getenv("OPENAI_API_KEY")
base_url = os.getenv("OPENAI_API_BASE")

@tool
def bazi_cesuan(query: str):
    """只有作八字排盘的时候才会使用这个工具，需要输入用户姓名和出生年月日时，如果血少用户姓名和出生年月时则不可用"""
    url = f"https://api.yuanfenju.com/index.php/v1/Bazi/cesuan"

    prompt = ChatPromptTemplate.from_template(
        """你是一个参数查询助手，根据用户输入内容找出相关的参数并按json格式返回。JSON字段如下: - "api_key":"cCQWMho3c5wAWLAdU8IenelQh", - "name":"姓名", "sex":"性别, 0表示男 1表示女",- "type":"日历类型,0农历,1公历,默认1", - "year":"出生年 例: 1988", - "month":"出生月 例: 8",- "day":"出生日 例: 7",- "hours":"出生时 例: 12",- "minute":"0",如果没有找到相关参数,则需要提醒用户告诉你这些内容，只返回数据结构，不需要有其他的评论,用户输入:{query}"""
    )
    parser = JsonOutputParser()
    prompt = prompt.partial( format_instructions=parser.get_format_instructions() )
    chain  = prompt | ChatOpenAI(api_key=api_key, base_url=base_url, model="gpt-4", temperature=0) | parser
    data   = chain.invoke({"query":query})
    data["api_key"] = "cCQWMho3c5wAWLAdU8IenelQh"
    print(data)

    result = requests.post(url, data=data)
    if result.status_code == 200:
        print("====返回数据=====")
        json = result.json()
        try:
            resutnstring = json["data"]["bazi_info"]["bazi"]
            return resutnstring
        except Exception as e:
            return "星座配对失败，可能你忘记询问用户星座和他配偶的星座了"
    else:
        return "技术错误,可能你忘记询问用户星座和他配偶的星座了"

def xingzuo_peidui(query: str):

    url = f"https://api.yuanfenju.com/index.php/v1/Peidui/xingzuo"

    prompt = ChatPromptTemplate.from_template(
        """你是一个参数查询助手，根据用户输入内容找出相关的参数并按json格式返回。JSON字段如下: - "api_key":"cCQWMho3c5wAWLAdU8IenelQh", - "xingzuo_male":"男方星座<例：白羊男,金牛男,双子男,巨蟹男,狮子男等等>", "xingzuo_female":"女方星座<例：白羊女,金牛女,双子女,巨蟹女,狮子女等等>", 用户输入:{query}"""
    )
    parser = JsonOutputParser()
    prompt = prompt.partial( format_instructions=parser.get_format_instructions() )
    chain  = prompt | ChatOpenAI(api_key=api_key, base_url=base_url, model="gpt-4", temperature=0) | parser
    data   = chain.invoke({"query":query})
    data["api_key"] = "cCQWMho3c5wAWLAdU8IenelQh"
    print(data)

    result = requests.post(url, data=data)
    if result.status_code == 200:
        print("====返回数据=====")
        json = result.json()
        try:
            resutnstring = json["data"]["description"]
            return resutnstring
        except Exception as e:
            return "八字查询失败，可能你忘记询问用户姓名或者出生年月时了"
    else:
        return "技术错误,可能你忘记询问用户姓名或者出生年月时了"

def bazi_hehun(query: str):

    url = f"https://api.yuanfenju.com/index.php/v1/Bazi/hehun"

    prompt = ChatPromptTemplate.from_template(
        """你是一个参数查询助手，根据用户输入内容找出相关的参数并按json格式返回。JSON字段如下: \
        - "api_key":"qWqOBzwmOq6BjLvawFYC8BVD4", \
        - "male_name":"男生姓名", - "male_type":"男生日历类型,0农历,1公历,默认1",  \
        - "male_year":"男生出生年 例: 1988",         \
        - "male_month":"男生出生月 例: 8",- "male_day":"男生出生日 例: 7",- "male_hours":"男生出生时 例: 12",- "male_minute":"0",如果没有找到相关参数,则需要提醒用户告诉你这些内容，只返回数据结构,\
        - "female_name":"女生姓名", - "female_type":"女生日历类型,0农历,1公历,默认1",  \
        - "female_year":"女生出生年 例: 1988",         \
        - "female_month":"女生出生月 例: 8",- "female_day":"女生出生日 例: 7",- "female_hours":"女生出生时 例: 12",- "female_minute":"0",\
        - "lang":"zh-cn" \
        如果没有找到相关参数,则需要提醒用户告诉你这些内容，只返回数据结构，\
        不需要有其他的评论,用户输入:{query}"""
    )
    parser = JsonOutputParser()
    prompt = prompt.partial( format_instructions=parser.get_format_instructions() )
    chain  = prompt | ChatOpenAI(api_key=api_key, base_url=base_url, model="gpt-4", temperature=0) | parser
    data   = chain.invoke({"query":query})
    data["api_key"] = "cCQWMho3c5wAWLAdU8IenelQh"
    print(data)

    result = requests.post(url, data=data)
    if result.status_code == 200:
        print("====返回数据=====")
        json = result.json()
        try:
            resutnstring = json["data"]
            return resutnstring
        except Exception as e:
            return "八字合婚查询失败，可能你忘记询问用户姓名或者出生年月时了"
    else:
        return "技术错误,可能你忘记询问用户姓名或者出生年月时了"


if __name__ == "__main__":

    # query_bazi = "我的姓名是彭圣杰, 我的性别是男，出生年月时2004年9月4号，晚上8点出生"
    query_peidui = "我的姓名是崔胄, 我星座时白羊座，我女朋友的星座是天秤座"
    # query_hehun = "我的姓名是彭圣杰, 我的性别是男，出生年月时2004年9月4号，晚上8点出生, 我女朋友的出生年月时2005年9月9号，晚上10点出生"
    # res   = bazi_cesuan(query)
    res = xingzuo_peidui(query_peidui)
    # res = bazi_hehun(query_hehun)
    print(res)
    # print(res['恋爱建议'])
    # print(res['注意事项'])
    # print(res['健康配对'])